package com.gitee.ywj1352.算法.week04;

/**
 * 给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量。
 *
 * 岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
 *
 * 此外，你可以假设该网格的四条边均被水包围。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/number-of-islands
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 岛屿数量 {

    /**
     * 输入：grid = [
     *   ["1","1","0","0","0"],
     *   ["1","1","0","0","0"],
     *   ["0","0","1","0","0"],
     *   ["0","0","0","1","1"]
     * ]
     * 输出：3
     *
     * @param grid
     * @return
     */
    public int numIslands(char[][] grid) {
        int nums = 0 ;
        for(int i = 0 ; i < grid.length;i++){
            for(int j = 0 ; j < grid[0].length; j ++){
                if(grid[i][j] == '1'){
                    ganren(grid,i,j);
                    nums ++;
                }
            }
        }
        return nums;
    }


    void ganren(char[][]grid , int i , int j ){
        if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] != '1'){
            return;
        }
        grid[i][j] = 0 ;
        ganren(grid, i+1, j);
        ganren(grid, i-1, j);
        ganren(grid, i, j+1);
        ganren(grid, i, j-1);
    }
}
